package demo2;

import java.util.Scanner;

/**
 * 这里因为sleep的原因，t1被阻塞了，当他被重新调回cpu时候，他会从主内存中读取flag值，让他感受到了flag变化
 * 但是依赖sleep实现内存可见性是不靠谱的且危险的，这只是特定JVM和代码实现下的巧合
 */
public class DEMO_03 {
    static int flag = 0;

    public static void main(String[] args) {

        Thread t1 = new Thread(() -> {
            System.out.println("t1线程启动");
            while (flag == 0) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("t1线程结束");
        });

        Thread t2 = new Thread(() -> {
            System.out.println("t2线程启动");
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入一个非零整数");
            flag = scanner.nextInt();
            System.out.println("t2线程结束");
        });
        //启动线程
        t1.start();
        t2.start();

    }
}
